<%  
    /*@ 扩展对象的形态方法 */
    Object.extend
    (
        Function,
        {
            //->执行传入函数
            execute:function()
            {
                if(arguments.length>0)
                {
                    for(var iarguments=0;iarguments<=arguments.length-1;iarguments++){                
                        if(Object.isFunction(arguments[iarguments])) arguments[iarguments]();
                    }
                }
            }
        }
    );
    /*@ 扩展对象的原型方法 */
    Object.extend
    (
        Function.prototype,
        {
            argumentNames:function() 
            {
                var names=this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");
                return (names.length==1&&names[0]==undefined) ? []:names;
            },
            bind:function() 
            {
                if(arguments.length<2&&arguments[0]===undefined)
                {
                    return this;
                }
                var __method=this,args=$A(arguments),object=args.shift();
                return function()
                {                    
                    return __method.apply(object,args.concat($A(arguments)));
                }
            },
            /*
            bindAsEventListener:function() 
            {
                var __method=this,args=$A(arguments),object=args.shift();
                return function($event) 
                {    
                    //对象,事件,参数
                    return __method.apply(object,[$event||window.event].concat(args));
                }
            },
            */
            curry:function() 
            {
                if(!arguments.length) return this;
                var __method=this,args=$A(arguments);
                return function() 
                {
                    return __method.apply(this,args.concat($A(arguments)));
                }
            },    
            methodize:function() 
            {
                if(this._methodized) return this._methodized;
                var __method=this;
                return this._methodized=function() 
                {
                    return __method.apply(null, [this].concat($A(arguments)));
                };
            },            
            wrap:function($wrapper) 
            {
                var __method=this;
                return function()
                {
                    return $wrapper.apply(this,[__method.bind(this)].concat($A(arguments)));
                }
            }
        }
    );
%>